package com.example.usercrud;

import com.example.usercrud.User;
import com.example.usercrud.UserRepository;
import jakarta.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 用户服务类，负责处理用户相关的业务逻辑
 */
@Service
public class UserService {

    /**
     * 自动注入用户仓库接口，用于访问数据库中的用户信息
     */
    @Autowired
    private UserRepository userRepository;

    /**
     * 获取所有用户信息
     *
     * @return 用户列表
     */
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    /**
     * 根据用户ID获取用户信息
     *
     * @param id 用户ID
     * @return 用户对象，如果找不到则返回null
     */
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    /**
     * 创建新用户
     *
     * @param user 新用户对象
     * @return 保存后的用户对象
     */
    public User createUser(User user) {
        User savedUser = userRepository.save(user);
        System.out.println("新增用户: " + savedUser);
        return savedUser;
    }

    /**
     * 更新用户信息
     *
     * @param id 用户ID
     * @param userDetails 包含更新信息的用户对象
     * @return 更新后的用户对象，如果找不到用户则返回null
     */
    public User updateUser(Long id, User userDetails) {
        User user = userRepository.findById(id).orElse(null);
        if (user != null) {
            user.setUsername(userDetails.getUsername());
            user.setEmail(userDetails.getEmail());
            user.setPassword(userDetails.getPassword());
            User updatedUser = userRepository.save(user);
            System.out.println("更新用户: " + updatedUser);
            return updatedUser;
        }
        return null;
    }

    /**
     * 删除指定ID的用户
     *
     * @param id 用户ID
     */
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
        System.out.println("已删除用户 ID: " + id);
    }

    /**
     * 删除所有用户，并重置用户ID计数器
     * 此方法使用了@Transactional注解，确保操作的原子性
     */
    @Transactional
    public void deleteAllUsers() {
        userRepository.truncateUsers();
        System.out.println("已删除所有用户，并重置 ID 计数器");
    }
}
